package componentes;

import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import excepciones.JugadorSeMurioException;

public class Jugador implements EscribibleEnXML {

	private int dinero;
	private int vida;
	private long puntaje;
	private String nombre;
	
	public Jugador(String nombre, int dinero, int vida) {
		this.puntaje = 0l;
		this.nombre = nombre;
		this.dinero = dinero;
		this.vida = vida;
	}
	
	public void aumentarDinero(int dinero){
		this.dinero += dinero;
	}
	
	public void sacarVida() throws JugadorSeMurioException{
		vida--;		
		if (vida == 0){
			throw new JugadorSeMurioException(); 
		}
	}
	
	public void incrementarPuntaje(long puntaje){
		this.puntaje += puntaje;
	}
	
	public void restarDinero(int dinero) throws NoTengoPlataException{
		if (dinero > this.dinero){
			throw new NoTengoPlataException();
		}
		this.dinero -= dinero;
	}
	
	public String getNombre(){
		return this.nombre;
	}
	
	public long getPuntaje(){
		return this.puntaje;
	}
	
	public int getVida(){
		return this.vida;
	}
	
	public int getDinero(){
		return this.dinero;
	}

	public Element toXML() {
		Element element = DocumentHelper.createElement("jugador");
		element.addAttribute("nombre", getNombre());
		element.addAttribute("vida", ""+getVida());
		element.addAttribute("dinero", ""+getDinero());
		element.addAttribute("puntaje", ""+getPuntaje());
		return element;
	}
	
	public static Jugador recuperarDesdeXML(Element elementoJugador){
		String nombre = elementoJugador.attributeValue("nombre");
		int vida = Integer.parseInt(elementoJugador.attributeValue("vida"));
		int dinero = Integer.parseInt(elementoJugador.attributeValue("dinero"));
		
		Jugador jugador = new Jugador(nombre, dinero, vida);
		jugador.puntaje = Integer.parseInt(elementoJugador.attributeValue("puntaje"));
		
		return jugador;
	}

	public void devolverVida() {
		this.vida = Constantes.VIDA_INICIAL_JUGADOR;
	}
}
